// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
/*
 *  DetectorResult.cpp
 *  zxing
 *
 *  Created by Christian Brunschen on 14/05/2008.
 *  Copyright 2008 ZXing authors All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <zxing/common/DetectorResult.h>

//#define OPENCV
#ifdef OPENCV
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <cctype>
#include <opencv/cv.h>
#include <opencv/highgui.h>


#include <opencv2/core/core.hpp>

using namespace cv;
using namespace std;
#endif
namespace zxing {

DetectorResult::DetectorResult(Ref<BitMatrix> bits,
                               ArrayRef< Ref<ResultPoint> > points)
  : bits_(bits), points_(points) {
#ifdef OPENCV

	  int w = bits_.operator ->()->getWidth();
	  int h = bits_.operator ->()->getHeight();
	  cout << "W:" << w << endl;
	  cout << "H:" << h << endl;
	  cout << "DetectorResult" << endl;


	  vector<unsigned char> p;
	  unsigned char *buffer = new unsigned char[w*h];
	  int i = 0;
	  for(int y = 0; y < h; y++)
	  {
		  for(int x = 0; x < w; x++)
		  {
			  if(bits_.operator ->()->get(x,y))
			  {
				  p.push_back(0);
				  buffer[i] = 0;
			  }
			  else
			  {
				  p.push_back(255);
				  buffer[i] = 255;
			  }
			  i++;
		  }
	  }
	  cv::Mat image_opencv(w,h,CV_8UC1,cv::Scalar(0));
	  image_opencv.data = buffer;
	  cv::imwrite("/home/v4l2/DetectorResult.bmp",image_opencv);
	  delete buffer;
#endif

}

Ref<BitMatrix> DetectorResult::getBits() {
  return bits_;
}

ArrayRef< Ref<ResultPoint> > DetectorResult::getPoints() {
  return points_;
}

}
